# 一、线程的相关概念
# 在Python中，想要实现多任务除了使用进程，还可以使用线程来完成，线程是实现多任务的另外一种方式

"""
 1、什么是线程
 线程是进程中执行代码的一个分支，每个执行分支（线程）要想工作执行代码需要CPU进行调度，
 也就是线程说CPU调度的基本单位，每个进程至少都有一个线程，而这个线程就是我们通常说的主线程。

"""


"""
2、GIL：全局解释器锁
首先需要明确的一点是GIL并不是Python的特性，它是实现Python解析器（CPYthon）时所引入的一个概念。

GIL全程 global interpret lock，全局解释器锁。

每个线程在执行的时候都需要先获取GIL，保证同一时刻只有一个线程可以执行代码，即同一时刻只有一个线程使用CPU。
在Python中，每一个Python线程执行之前都需要去获取GUL锁，获得该锁的线程才可以执行，没有获得的只能等待，
当具有GIL锁的线程运行完成后，其他等待的线程就会去争夺GIL锁，这就造成了，在PYthon中使用多线程，但同一时刻下依旧只有一个线程在运行，
所以Python多线程其实并不是【并行】，而是【并发】。

看到下图，图中Python中的GIL的工作实例，其中有3个线程，线程与线程之间是顺序执行的，每个线程开始执行时都会去获得GIL，
防止其他线程运行，每执行完一段时间后，就会释放GIL，让别的现场可以去争夺执行权限，如果自己本身也没有执行完成，则本身也会参与这次争夺。
"""

"""
3、使用Thread类-创建线程：
    ·直接使用Thread创建线程---面向函数
    ·继承Thread类创建进程----面向对象
"""
